"""
4. 寻找两个正序数组的中位数
给定两个大小分别为 m 和 n 的正序（从小到大）数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O(log (m+n)) 。
 
示例 1：
输入：nums1 = [1,3], nums2 = [2]
输出：2.00000
解释：合并数组 = [1,2,3] ，中位数 2
示例 2：
输入：nums1 = [1,2], nums2 = [3,4]
输出：2.50000
解释：合并数组 = [1,2,3,4] ，中位数 (2 + 3) / 2 = 2.5
"""

def find_median_sorted_arrays(nums1, nums2):
    """
    :type nums1: List[int]
    :type nums2: List[int]
    :rtype: float
    """
    nums2_index = 0
    merged  = []
    nums2_len = len(nums2)
    for i in range(len(nums1)):
        while nums2_index < nums2_len and nums2[nums2_index] < nums1[i]:
            merged .append(nums2[nums2_index])
            nums2_index += 1

        merged .append(nums1[i])
    merged .extend(nums2[nums2_index:])
    intergerr = len(merged ) // 2
    reminder = len(merged ) % 2
    if (reminder == 0):
        median = float((merged [intergerr] + merged [intergerr - 1]) / 2.0)
        return median
    else:
        return merged [intergerr]
    
def find_median_sorted_arrays_one(nums1, nums2):
    """
    :type nums1: List[int]
    :type nums2: List[int]
    :rtype: float
    """ 
    merged = []
    i,j=0,0
    while i < len(nums1) and j < len(nums2):
        if nums1[i] < nums2[j]:
            merged.append(nums1[i])
            i += 1
        else :
            merged.append(nums2[j])
            j += 1
    
    merged.extend(nums1[i:])
    merged.extend(nums2[j:])
    merged_len = len(merged)
    if merged_len % 2 == 0:
        median = float( ( merged[merged_len // 2 -1] + merged[merged_len // 2]) / 2.0)
        return median
    else:
        return merged[merged_len // 2]
    
if __name__ == '__main__':
    nums1 = [12]
    nums2 = [34]
    print(find_median_sorted_arrays(nums1, nums2))
    print(find_median_sorted_arrays_one(nums1, nums2))